# 1. 使用函数嵌套定义方法求n阶乘和
# def sum(n):
#     def fact(a):
#         t = 1
#         for i in range(1,a + 1):
#             t *= i
#         return t
#     s = 0
#     for i in range(1, n + 1):
#         s += fact(i)
#     return s
#
# n = 5
# print("{}以内的阶乘和为: {}".format(n, sum(n)))

# 2. 位置传递与值传递区别
# def getscore(pe, eng, math, phy,chem):
#     return pe*0.5 + eng * 1 + math * 1.2 + phy * 1 + chem * 1
# # 按位置传递
# print("按位置传递:",getscore(93,89,78,89,72))
# # 使用赋值参数
# print("使用赋值参数:",getscore(pe=93,math=78,chem=72,eng=89,phy=89))

# 3. 基本类型作为实参进行参数传递
# a = 10
# def func(num):
#     num += 1
#     print("形参的地址: {}".format(id(num)))
#     print("形参的值: {}".format(num))
#     a = 1  # 局部变量，只在函数内部有效，离开后无效
# func(a) #调用函数。传递的实形类型为基本数据类型。
# print("实参的值为： {} \n实参地址为： {}".format(a,id(a)))

# . 组合数据类型作为实参传递参数
# tup=(1,5,8,10,15,16,21) # 元组
# ls=[] # 列表
# def getOdd(tup1,lst):
#     for i in tup:
#         if i % 2 != 0: # 奇数
#             lst.append(i)
#     return ls
# #调用函数。采用组合数据类型调用，形参的改变会影响实参。引用传递
# getOdd(tup, ls)
# print(ls)
#
# # 在 Python 中，形参（函数参数）对实参（传入的参数）的修改取决于传递的对象类型。
# # 对于可变对象（如列表、字典和自定义对象），你可以直接修改它们的内容；
# # 而对于不可变对象（如整数、字符串和元组），你不能直接修改它们的值，但可以返回新的值。

# 默认参数
# def showmessage(name, age=18):
#     "打印任何传入的字符串"
#     print("姓名: ",name)
#     print("年龄: ", age)
#     return
#
# #调用 showmessage 函数
# showmessage(age=19,name="Kate" )
# print ("------------------------")
# showmessage(name="John")
# print ("------------------------")
# showmessage('zhangsan')
# 实参没有显示传递，默认使用形参的默认值实参没有显示传递，默认使用形参的默认值


# 可变参数

# 可变参数是指在函数定义时，可以接受任意数量的参数。
# 可以使用一个星号*来定义一个接收可变数量参数的函数，形参的类型是元组
# 也可以使用两个型号，此时形参的类型是字典
# def test(a,b,*args,**kw):
#     print(a, b)
#     print(args)
#     print(kw)
# #调用
# test(10,20,2,3,4,100,28,name='java',age=20)
#
# # 从键盘上输入一个列表，编写一个函数计算列表元素的平均值
# def mean(numlist):
#     s = 0.0
#     for num in numlist:
#         s += num
#     return s / len(numlist)
#
# # 调用
# mean([10, 20, 15, 8, 30])


# 从键盘上输入一个列表，编写一个函数计算列表元素的平均值
# def mean(numlist):
#     s=0.0
#     for num in numlist:
#         s+=num
#     return s/len(numlist)
# #调用
# print(mean([10,20,15,8,30]))


